<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>原型继承</title>
</head>
<body>

<script>
  // function Super(){
  //   this.name="小明";
  // }
  // Super.prototype.sayName = function(){
  //   alert(this.name)
  // };
  // function Sub(){}
  //
  // Sub.prototype = new Super();
  // var instance = new Sub();
  // instance.sayName();//小明
</script>

<script>
  //当超类中包含引用类型属性值时，其中一个子类的多个实例中，只要其中一个实例引用属性只发生修改一个修改，其他实例的引用类型属性值也会立即发生改变
  //原因是超类的属性变成子类的原型属性
  function Super() {
    this.name = "小明";
    this.friends = ['小红', '小强'];
  }

  Super.prototype.sayName = function () {
    alert(this.name)
  };

  function Sub() {
  }

  Sub.prototype = new Super();
  var instance1 = new Sub();
  var instance2 = new Sub();
  instance1.friends.push('张三');//这个是后其他的同类实例的引用类型
  console.log(instance1.friends);//["小红", "小强", "张三"]
  console.log(instance2.friends);//["小红", "小强", "张三"]
</script>


<script>
  //  父类
  function Person(name, age) {
    this.name = name;
    this.age = age;
  }

  // 父类的原型对象属性
  Person.prototype.id = 10;

  // 子类
  function Boy(sex) {
    this.sex = sex
  }

  // 继承实现
  Boy.prototype = new Person('linqinghu', 24);//父类实例对象
  var boy = new Boy('男');
  console.log(boy.name);//linqinghu
  console.log(boy.id);//10
</script>


</body>
</html>